package com.sz.biz.logistics.base.service;

import com.sz.biz.logistics.base.entity.RegionSchema;
import com.sz.biz.logistics.base.dto.RegionSchemaDto;
import com.sz.common.base.dto.QResultDto;
import com.sz.common.base.dto.QueryParams;
import com.sz.common.base.dto.ResultDto;

import java.util.Date;
import java.util.List;

/**
 * Function: 分区方案service <br>
 * Author: hpeng.wang <br>
 * Date: 2017-02-15 14:58:00
 */

public interface RegionSchemaService {
    /**
     * 新增
     *
     * @param entry 新增的实体
     * @return 新增是否成功
     */
    String save(RegionSchema entry);

    /**
     * 根据主键id删除实体
     *
     * @param id 主键id
     */
    int delete(Integer id);

    /**
     * 根据主键id删除实体
     *
     * @param ids 主键id集合
     */
    void batchdelete(List<Integer> ids);

    /**
     * 批量修改实体
     *
     * @param list
     */
    void batchUpdate(List<RegionSchema> list);

    /**
     * 更新实体
     *
     * @param entry 更新的实体
     * @return 新增是否成功
     */
    int update(RegionSchema entry);

    /**
     * 更新冗余的itemDetail
     *
     * @param id         更新的id
     * @param itemDetail 更新的itemDetail
     */
    void updateItemDetail(Integer id, String itemDetail);


    /**
     * 根据主键Id查询单个实体
     *
     * @param id 主键id
     * @return RegionSchema
     */
    RegionSchema findById(Integer id);

    /**
     * 根据分区方案的uid查询出当前分区方案下所有分区明细的[国家]和[国家名字]
     *
     * @param uids      分区方案的uid
     * @param q         查询的参数
     * @param pageIndex 起始页
     * @param pageSize  分页大小
     * @return 如果当前当前分区方案为运输工具，那么返回的是运输工具(海运或空运)所在国家的集合
     */
    ResultDto findRegionCountryByUid(List<String> uids, String q, int pageIndex, int pageSize);

    /**
     * 根据分区方案的uid查询出当前分区方案下所有的运输工具(海运或空运)的id与name
     *
     * @param uid         分区方案的uid
     * @param countryCode 国家二字码
     * @param cityId
     *@param pageIndex   起始页
     * @param pageSize    分页大小
     * @param productId   产品id
     * @param q           查询的参数     @return 返回的是运输工具的id与name
     */
    ResultDto findTransportByUid(String uid, String countryCode, String cityId, int pageIndex, int pageSize, Integer productId, String q);

    /**
     * 根据分区方案、国家、地区id 查询出对应的地区数据，供添加地址使用。
     *
     * @param uids        分区方案的uid
     * @param countryCode 国家二字码
     * @param areaId      地区id
     * @param q           查询的参数
     * @param pageIndex   起始页
     * @param pageSize    分页大小
     * @return 地区数据
     */
    ResultDto findCountryAreaByUid(List<String> uids, String countryCode, String areaId, String q, int pageIndex, int pageSize);

    /**
     * 根据UId查询单个实体
     *
     * @param Uid Uid
     * @return RegionSchemaDto
     */
    RegionSchemaDto findActivedByUid(String Uid);

    /**
     * 根据uid查询出当前处于激活状态的分区方案
     * @param uids uid
     * @return
     */
    List<RegionSchema> findEntryActivedByUids(List<String> uids);
    RegionSchema findEntryActivedByUid(String uid);

    /**
     * 根据UId和时间查询单个实体
     *
     * @param Uid  Uid
     * @param time
     * @return RegionSchemaDto
     */
    RegionSchemaDto findByUidAndTime(String Uid, Date time);

    /**
     * 根据id集合查询实体
     *
     * @param ids
     * @return  List<RegionSchema>
     */
    List<RegionSchema> findByIds(List<Integer> ids);

    /**
     * 根据条件查询实体
     *
     * @param code 分区方案编号
     * @param name 分区方案名称
     * @param id   主键id，当不为空时，查询时不包涵这条记录
     * @return RegionSchema
     */
    RegionSchema findByParam(String code, String name, Integer id);

    /**
     * 根据名称查询实体
     *
     * @param name 分区方案名称
     * @return QResultDto
     */
    QResultDto findByName(String name);

    /**
     * 根据code和类型查询
     *
     * @param code
     * @param type
     * @return RegionSchema
     */
    RegionSchema findByCodeAndType(String code, Integer type);

    /**
     * 根据条件查询实体
     *
     * @param params 查询的参数集
     * @return QResultDto
     */
    QResultDto findByParam(QueryParams params);

    /**
     * 检查编码
     *
     * @param id
     * @param code
     */
    void regionSchemaCheckCode(int id, String code);

    /**
     * 根据uids删除数据
     * @param list
     */
    void batchDeleteByUids(List<RegionSchema> list);

    /**
     * 根据ids将激活状态改为不激活
     * @param list
     */
    void batchDeleteByIds(List<RegionSchema> list);


    RegionSchema  findSimpleActivedByUid(String Uid);
}
